/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jp.co.yamcha.a02.dataaccess;

import com.google.gdata.client.calendar.CalendarService;
import com.google.gdata.data.calendar.CalendarEventEntry;
import com.google.gdata.data.calendar.CalendarEventFeed;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;

/**
 * Google CalendarにアクセスするためのDAO。
 *
 * @author test
 */
public class A02DAO {
    // Google Feedsのアドレス
    //TODO こっち「feeds/default」もそのうち対応する
    //private static String GOOGLE_CAL_URL = "http://www.google.com/calendar/feeds/default/private/full";

    /**
     * デフォルト　コンストラクタ
     */
    public A02DAO() {
        //処理無し
    }

    /**
     * Googleにアクセスして、予定データを取得する。
     *
     * @param id Googleアカウントのアカウント
     * @param pw Googleアカウントのパスワード
     * @return 予定データ
     */
    public ArrayList<HashMap> getCalenderData(String id, String pw) throws Exception {
        //戻り値のガワ作成
        ArrayList<HashMap> ret = new ArrayList<>();

        /* サービスの作成 */
        CalendarService myService = new CalendarService("MyCalendarService");
        myService.setUserCredentials(id, pw);

        /* カレンダ内のイベントを取得 */
        URL feedUrl = new URL("http://www.google.com/calendar/feeds/" + id + "/private/full");
        CalendarEventFeed myFeed = myService.getFeed(feedUrl, CalendarEventFeed.class);

        //データ加工
        HashMap<String, String> map;
        HashMap<String, String> initMap = new HashMap<>();
        /*
         for (int i = 0; i < myFeed.getEntries().size(); i++) {
         map = initMap;
         CalendarEventEntry entry = myFeed.getEntries().get(i);

         map.put("title", entry.getTitle().getPlainText());
         map.put("content", entry.getTextContent().getContent().getPlainText());
         map.put("startTime", entry.getTimes().get(0).getStartTime().toString());
         map.put("endTime", entry.getTimes().get(0).getEndTime().toString());
         map.put("locations", entry.getLocations().get(0).getValueString());
         ret.add(map);
         }
         */
        for (CalendarEventEntry entry : myFeed.getEntries()) {
            map = initMap;
            map.put("title", entry.getTitle().getPlainText());
            map.put("content", entry.getTextContent().getContent().getPlainText());
            map.put("startTime", entry.getTimes().get(0).getStartTime().toString());
            map.put("endTime", entry.getTimes().get(0).getEndTime().toString());
            map.put("locations", entry.getLocations().get(0).getValueString());
            ret.add(map);
        }

        return ret;
    }
}
